/* 

    EPSG:3857（投影）：数据的可读性差和数值大存储比较占用内存。
    EPSG:4326（地理）：使用此坐标系会导致页面变形。
*/
export function tileMercatorToLnglat (mercatorX, mercatorY) {
    let x = (mercatorX / 20037508.34) * 180
    let y = (mercatorY / 20037508.34) * 180
    y = (180 / Math.PI) * (2 * Math.atan(Math.exp((y * Math.PI) / 180)) - Math.PI / 2)
    return [x, y]
}

export function tileLngLatToMercator (x, y) {
    // let x = (mercatorX / 20037508.34) * 180
    // let y = (mercatorY / 20037508.34) * 180
    // y = (180 / Math.PI) * (2 * Math.atan(Math.exp((y * Math.PI) / 180)) - Math.PI / 2)
    // return [x, y]
    x = 20037508.34 * x / 180
    
    y = Math.PI * y / 180
    y = y + Math.PI / 2
    y = y / 2
    y = Math.tan(y)
    y = Math.log(y) * 180 / Math.PI 
    y = 20037508.34 * y / 180
    return [
        x, y
    ]
}

export function tileUrlMercatorToGeo(url) {
    return url.replace(/bbox/ig, 'bbox').replace(/(bbox=)([^&]+)/, ($0, $1, $2) => {
        let points = $2.split(',')
        let leftLngLat = tileMercatorToLnglat(points[0], points[1])
        let rightLngLat = tileMercatorToLnglat(points[2], points[3])
        return `${$1}${leftLngLat[0]},${leftLngLat[1]},${rightLngLat[0]},${rightLngLat[1]}`
    });
  }
